package com.lyon.custom.server.common.notify;

import java.util.concurrent.Executor;

/**
 * @author LeeYan9
 * @since 2021-11-29
 */
public interface Publisher {
    /**
     * 添加事件订阅器
     * @param consumer
     */
    void addSubscriber(Subscriber consumer);

    /**
     * 添加发布器
     * @param event 事件
     */
    void publish(Event event);

    /**
     * 发布时器初始化
     * @param bufferSize 事件缓存队列
     * @param subscriberType 事件类型
     */
    void init(int bufferSize , Class<? extends Event> subscriberType);

    /**
     * 设置 订阅处理的线程池
     * @param executor
     */
    void setExecutor(Executor executor);

    /**
     * 是否是停止状态
     * @return
     */
    boolean shutdown();

    /**
     * 发布器启动
     */
    void start();

}
